import java.util.Arrays;
import java.util.Comparator;

public class code2 {
    // 力扣 150 用最少数量的箭矢引爆气球
    public int findMinArrowShots(int[][] points) {
        // 首先排出的是当数组长度为 0 时的情况
        if (points.length == 0) {
            return 0;
        }

        // 这里需要先针对这个数组中的元素信息进行一次排序操作
        // 需要注意这里的 new Comparator<int[]>() {} 操作，在这里需要调用这里的 Comparator 接口在这之中需要重写这里的
        // comper 方法
        Arrays.sort(points, new Comparator<int[]>() {
            public int compare(int[] point1, int[] point2) {
                if (point1[1] > point2[1]) {
                    return 1;
                } else if (point1[1] < point2[1]) {
                    return -1;
                } else {
                    return 0;
                }
            }
        });

        // 因为这里只有一行数组元素，所以这里获取的是 第一组数据中的最右侧边界值
        // {{10,16},{2,8},{1,6},{7,13}} 这里的 16
        int pos = points[0][1];
        // 定义一个标记位记录当前能穿透的气球个数
        int flag = 1;
        for(int i = 1; i < points.length; i++) {
            // 这里比较的是 当前气球的 左侧边界 是否大于 前一个 气球的右侧边界 (可以看到 这里的 i 是从 1 开始的)
            // 如果 大于 旧表名，这两个气球是不在一条线上的
            if(points[i][0] > pos) {
                // 此时 增加一次射击次数
                flag++;
                // 并且更新当前的 pos 气球的右边界值
                pos = points[i][1];
            }
        }
        // 此时返回 flag 标记的射击次数
        return flag;
    }

}
